package com.zrrd.io.exercises;

import java.io.*;
import java.util.Arrays;

/**
 * @author WanJl
 * @version 1.0
 * @title Exercises01
 * @description
 *案例需求：
 * - 使用字符缓冲流读取文件中的数据，排序后再次写到本地文件
 *实现步骤
 * - 将文件中的数据读取到程序中
 * - 对读取到的数据进行处理
 * - 将处理后的数据添加到集合中
 * - 对集合中的数据进行排序
 * - 将排序后的集合中的数据写入到文件中
 *
 *
 *
 * @create 2023/10/15 15:01
 */
public class Exercises01 {
    /**
     * 读取文件内容的方法
     * @param fileName
     * @return
     */
    public String read(String fileName) throws Exception {
        BufferedReader br=new BufferedReader(new FileReader(fileName));
        String s = br.readLine();
        return s;
    }

    /**
     * 把字符串转换成int类型数组的方法
     * @param str
     * @return
     */
    public int[] toIntArray(String str){
        //按照指定的字符将原本的字符串变成一个字符串数组"1 15 7 20 75 90"
        String[] strArray = str.split(" ");
        //s ={"1","15",""7,"20","75","90"}
        //然后创建一个int类型数组，长度和字符串数组长度相等。
        int[] intArray=new int[strArray.length];
        //遍历字符串数组，把字符串数组中的每一个元素都转换成int类型元素。然后赋值给int类型数组
        for (int i = 0; i < intArray.length; i++) {
            String s = strArray[i];
            //类型转换，将字符串类型转换成int类型
            Integer number = Integer.parseInt(s);
            //再把转换后的int类型值赋值给int数组
            intArray[i]=number;
        }
        return intArray;
    }

    /**
     * 数组排序的方法
     * @param arr
     * @return
     */
    public int[] sort(int[] arr){
        Arrays.sort(arr);
        return arr;
    }

    /**
     * 把int类型数组转换成字符串的方法
     * @param arr
     * @return
     */
    public String toString(int[] arr){
        //{1,7,15,20,75,90}
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            builder.append(arr[i]+" ");
        }
        return builder.toString();
    }

    /**
     * 向指定文件写入内容的方法
     * @param fileName
     * @param content
     */
    public void write(String fileName,String content) throws IOException {
        FileWriter fw = new FileWriter(fileName);
        fw.write(content);
        fw.close();
    }

    public void readSortWrite(String fileName) throws Exception {
        //读取指定文件中的内容
        String content =read(fileName);
        //将内容转换成int类型数组
        int[] intArray = toIntArray(content);
        //排序
        intArray = sort(intArray);
        //将排序后的数组转换成字符串
        content = toString(intArray);
        //写入到指定位置。
        write(fileName,content);
    }

    public static void main(String[] args) throws Exception {
        new Exercises01().readSortWrite("D:/my.txt");

    }


}

